package cn.iocoder.yudao.module.book.dal.mysql.category;

import java.util.*;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.book.controller.app.category.vo.AppCategoryRespVO;
import cn.iocoder.yudao.module.book.controller.app.category.vo.AppCategoryDetailRespVO;
import cn.iocoder.yudao.module.book.controller.app.category.vo.AppCollectionDetailRespVO;
import cn.iocoder.yudao.module.book.dal.dataobject.category.CategoryDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import cn.iocoder.yudao.module.book.controller.admin.category.vo.*;

/**
 * 分类 Mapper
 *
 * @author xi
 */
@Mapper
public interface CategoryMapper extends BaseMapperX<CategoryDO> {

    default PageResult<CategoryDO> selectPage(CategoryPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<CategoryDO>()
                .eqIfPresent(CategoryDO::getTitle, reqVO.getTitle())
                .eqIfPresent(CategoryDO::getClassifyId, reqVO.getClassifyId())
                .eqIfPresent(CategoryDO::getIsTop, reqVO.getIsTop())
                .betweenIfPresent(CategoryDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(CategoryDO::getCategoryId));
    }
    AppCategoryRespVO selectByCategoryId(@Param("categoryId") Integer categoryId);

    List<AppCategoryRespVO> selectByClassifyId(@Param("classifyId") Integer classifyId);

    /**
     * 获取分类详情列表（包含绘本集信息）
     */
    List<AppCategoryDetailRespVO> getCategoryDetailsWithCollections();

    /**
     * 获取指定分类下的绘本集详情
     */
    List<AppCollectionDetailRespVO> getCollectionsByCategoryId(@Param("categoryId") Integer categoryId, @Param("userId") Long userId);
    
    /**
     * 根据大分类ID获取层级数据
     */
    List<AppCategoryDetailRespVO> getHierarchyByClassifyId(@Param("classifyId") Integer classifyId);
    
    /**
     * 获取绘本集下的所有图书和图片信息
     */
    List<java.util.Map<String, Object>> getBooksWithImagesByCollectionId(@Param("collectionId") Integer collectionId);
    
    /**
     * 根据语言参数获取分类层级数据（大分类列表）
     */
    List<java.util.Map<String, Object>> getClassifyByLanguage(@Param("isEnglish") Integer isEnglish);
    
    /**
     * 根据大分类ID和语言获取分类列表
     */
    List<java.util.Map<String, Object>> getCategoriesByClassifyAndLanguage(@Param("classifyId") Integer classifyId, @Param("isEnglish") Integer isEnglish);
    
    /**
     * 根据分类ID和语言获取绘本集合列表（按用户书架过滤：仅返回该用户未删除的集合）
     */
    List<java.util.Map<String, Object>> getCollectionsByCategoryAndLanguage(@Param("categoryId") Integer categoryId,
                                                                            @Param("isEnglish") Integer isEnglish,
                                                                            @Param("userId") Long userId);
    
    /**
     * 根据绘本集ID获取图书列表
     */
    List<java.util.Map<String, Object>> getBooksByCollectionId(@Param("collectionId") Integer collectionId);
}